home *** CD-ROM | disk | FTP | other *** search
/ CICA 1993 April / CICA MS Windows - April 1993.iso / unzipped / programr / bcpp / cmmdlg / printdlg.pas < prev    next >
Pascal/Delphi Source File  |  1992-09-07  |  5KB  |  202 lines

  1. {µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ}
  2. {   \\\                                    }
  3. {  -(j)-                                   }
  4. {    /juanca                               }
  5. {    ~                                     }
  6. {$D ⌐ ACASA 1989-1992, All rights reserved }
  7. {µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ}
  8.  
  9. {Shell objects around the Print and PrinterSetup dialogs }
  10.  
  11. UNIT PRINTDLG;
  12. {$C MOVEABLE DEMANDLOAD DISCARDABLE}
  13. INTERFACE
  14.   USES
  15.     WINTYPES,
  16.     WOBJECTS,
  17.     COMMDLG,
  18.     COMONDLG;
  19.  
  20.              
  21.   TYPE
  22.     pPrintSetupDlg = ^tPrintSetupDlg;
  23.     tPrintSetupDlg = OBJECT ( tCommonDlg )
  24.  
  25.       printerData : pPrintDlg;
  26.  
  27.       CONSTRUCTOR
  28.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg);
  29.  
  30.       PROCEDURE
  31.       preparePrinterData;
  32.         virtual;
  33.  
  34.       FUNCTION
  35.       printFlags :Longint;
  36.         virtual;
  37.  
  38.       FUNCTION
  39.       execute:Integer;
  40.         virtual;
  41.  
  42.     END;
  43.  
  44.     pPrintOptDlg = ^tPrintOptDlg;
  45.     tPrintOptDlg = OBJECT ( tPrintSetupDlg)
  46.  
  47.       setupDlg :pPrintSetupDlg;
  48.  
  49.  
  50.       CONSTRUCTOR
  51.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg; isetup :pPrintSetupDlg);
  52.  
  53.       DESTRUCTOR
  54.       done;
  55.         virtual;
  56.  
  57.       PROCEDURE
  58.       preparePrinterData;
  59.         virtual;
  60.  
  61.     END;
  62.  
  63. {****************************************************************}
  64. IMPLEMENTATION
  65.  
  66.  
  67.       CONSTRUCTOR
  68.       tPrintSetupDlg.
  69.       {}
  70.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg);
  71.         begin
  72.           tCommonDlg.init(iparent, name);
  73.           printerData := iData;
  74.         end;
  75.  
  76.       FUNCTION
  77.       tPrintSetupDlg.
  78.       {}
  79.       printFlags :Longint;
  80.         begin
  81.           printFlags := 0
  82.         end;
  83.  
  84.       PROCEDURE
  85.       tPrintSetupDlg.
  86.       {}
  87.       preparePrinterData;
  88.         begin
  89.           with printerData^
  90.           do begin
  91.             lStructSize   := sizeof(printerData^);
  92.             hInstance     := SYSTEM.HInstance;
  93.             if parent <> nil
  94.             then
  95.               hwndOwner   := parent^.hWindow
  96.             else
  97.               hwndOwner   := 0;
  98.             lpSetupTemplateName:= attr.Name;
  99.             flags         := flags or pd_PrintSetup or printFlags;
  100.  
  101.             lCustData    := Longint(@Self);  {this does nothing, but could be usefull}
  102.  
  103.             move(Self.instance, lpfnPrintHook, sizeOf(lpfnPrintHook)); {this does the trick!}
  104.  
  105.             if (lpSetupTemplateName <> nil)
  106.             then
  107.               flags := flags or pd_EnableSetupTemplate;
  108.             move(Self.instance, lpfnSetupHook, sizeOf(lpfnSetupHook));
  109.             flags := flags or pd_EnableSetupHook
  110.           end;
  111.         end;
  112.  
  113.  
  114.       FUNCTION
  115.       tPrintSetupDlg.
  116.       {}
  117.       execute:Integer;
  118.         var
  119.           result :Integer;
  120.           oldKBHandler :pWindowsObject;
  121.         begin
  122.           preparePrinterData;
  123.           oldKbHandler := Application^.KBHandlerWnd;
  124.           isModal      := TRUE;  { this is very important, object gets freed twice otherwise !}
  125.           if COMMDLG.printDlg(printerData^)
  126.           then
  127.             execute := id_Ok
  128.           else begin
  129.             result := commDlgExtendedError;
  130.             if result = 0
  131.             then
  132.               execute := id_Cancel
  133.             else begin
  134.               execute := -result;
  135.               status  := em_InvalidWindow
  136.             end;
  137.           end;
  138.           with printerData^
  139.           do begin
  140.             @lpfnSetupHook := nil;
  141.             @lpfnPrintHook := nil;
  142.             lpSetupTemplateName := nil;
  143.             lpPrintTemplateName := nil;
  144.             { clear flags used for dialog }
  145.             flags := flags and not ( pd_EnableSetupTemplate or
  146.                                      pd_EnablePrintTemplate or
  147.                                      pd_EnableSetupHook     or
  148.                                      pd_EnablePrintHook
  149.                                      );
  150.           end;
  151.           hwindow := 0;
  152.           isModal := FALSE;
  153.           Application^.KBHandlerWnd := OldKbHandler;
  154.         end;
  155.  
  156.       CONSTRUCTOR
  157.       tPrintOptDlg.
  158.       {}
  159.       init(iparent:PWindowsObject; name :PChar; idata :pPrintDlg; isetup :pPrintSetupDlg);
  160.         begin
  161.           tPrintSetupDlg.init(iparent, name, iData);
  162.           setupDlg  := isetup;
  163.           if setupDlg <> nil
  164.           then
  165.             setupDlg^.printerData := printerData
  166.         end;
  167.  
  168.       DESTRUCTOR
  169.       tPrintOptDlg.
  170.       {}
  171.       done;
  172.         begin
  173.           if setupDlg <> nil
  174.           then
  175.             setupDlg^.free;
  176.           tCommonDlg.done
  177.         end;
  178.  
  179.  
  180.       PROCEDURE
  181.       tPrintOptDlg.
  182.       {}
  183.       preparePrinterData;
  184.         begin
  185.           tPrintSetupDlg.preparePrinterData;
  186.           with printerData^
  187.           do begin
  188.             if setupDlg <> nil
  189.             then
  190.               setupDlg^.preparePrinterData;
  191.             lpPrintTemplateName:= attr.Name;
  192.             move(Self.instance, lpfnPrintHook, sizeOf(lpfnPrintHook));
  193.             flags := flags and not pd_PrintSetup;
  194.  
  195.             if (lpPrintTemplateName <> nil)
  196.             then
  197.               flags := flags or pd_EnablePrintTemplate
  198.           end
  199.  
  200.         end;
  201.  
  202. END.